home *** CD-ROM | disk | FTP | other *** search
/ Tiger Disk 6 / Tiger_Disk_006_19xx_Tiger-Crew-Disk_de_Side_B.d64 / 6 mk (.txt) < prev    next >
Commodore BASIC  |  2023-02-26  |  7KB  |  165 lines

  1. 8 clr
  2. 10 u$="[197][197][197][197][197][197][197][197][197][197]":o$="[164][164][164][164][164][164][164][164][164]"
  3. 100 data24,173,0,128,105,128,141,0,128,96,56,173,0,128,233,128,141,0,128,96
  4. 110 restore:fori=830to849:readin:pokei,in:next
  5. 200 print"[147][164][164]";o$;o$;o$;o$:print"syntax-lehrgang 'maschinensprache' (6)"
  6. 210 printo$;o$;o$;"[164][164][164][164][164]":print"1.3.2. arithmetische operationen[146]"
  7. 220 print"arithmetische  operationen sind  solche"
  8. 230 print"operationen,  bei  denen  addiert  oder"
  9. 240 print"subtrahiert wird. sie beeinflussen alle"
  10. 250 print"das z-flag und das n-flag.  d.h.:  wenn"
  11. 260 print"das rechenergebnis  null (negativ) ist,"
  12. 270 print"setzt die cpu das z- (n-) flag."
  13. 310 i=1:gosub5000:ifflthen200
  14. 400 print"[147]die befehle adc, sbc, cmp, cpx  und cpy"
  15. 410 print"beeinflussen ferner das c-flg (c=carry,"
  16. 420 print"uebertrag)."
  17. 430 print"im carry-flag  werden  uebertraege  bei"
  18. 440 print"rechenoperationen registriert.  das er-"
  19. 450 print"gebnis der addition der zwei zahlen $ff"
  20. 460 print"und $01  ist $00,  das carry-flag  wird"
  21. 470 print"dabei gesetzt."
  22. 510 i=2:gosub5000:ifflthen200
  23. 600 print"[147]eine wesentliche  besonderheit  ist der"
  24. 610 print"dezimale rechenmodus:   er[160] kann  durch"
  25. 620 print"setzen des d-flags fuer die befehle adc"
  26. 630 print"und sbc eingeschaltet werden.    er be-"
  27. 640 print"wirkt, dass die cpu das byte $12  jetzt"
  28. 650 print"als dezimalzahl 12  auffasst und  bear-"
  29. 660 print"beitet."
  30. 670 print"das ergebnis  der addition  '$09 + $01'"
  31. 680 print"ist dann nicht mehr $0a,  sondern $10 !"
  32. 690 print"es wird hier also die dezimale addition"
  33. 700 print"'9 + 1 = 10' ausgefuehrt."
  34. 740 i=3:gosub5000:ifflthen400
  35. 800 print"[147][164][164][164]":print"adc[146]: add memory to accumul. with carry"
  36. 810 print"     [197][197]";spc(26);"[197]"
  37. 820 print"zum inhalt des accumulators werden  das"
  38. 830 print"adressierte byte   sowie das carry-flag"
  39. 850 print"addiert.  die summe steht anschliessend"
  40. 860 print"im ac. entstand ein ueberlauf,  so wird"
  41. 870 print"das c-flag gesetzt,  andernfalls rueck-"
  42. 880 print"gesetzt."
  43. 890 print"vor einer addition muss man also das c-"
  44. 900 print"-flag ruecksetzen, damit nicht  das er-"
  45. 910 print"gebnis um eins zu gross geraet,   falls"
  46. 920 print"das c-flag zufaellig gesetzt war."
  47. 930 i=4:gosub5000:ifflthen600
  48. 1000 print"[147]beispiele:":printu$
  49. 1010 print"1. es soll berechnet werden $01 + $01 !"
  50. 1015 print"   ($01 + $01 = $02)"
  51. 1020 printtab(9);"clc";spc(9);"loescht das c-flag"
  52. 1030 printtab(21);"(kommt spaeter!)"
  53. 1040 printtab(9);"lda # $01   laed $01 in den ac"
  54. 1050 printtab(9);"adc # $01   addiert $01 dazu"
  55. 1060 print"das ergebnis (= $02) steht  im ac,  das"
  56. 1070 print"c-flag ist nicht gesetzt."
  57. 1130 i=5:gosub5000:ifflthen800
  58. 1200 print"[147]2. es soll berechnet werden $ff + $01 !"
  59. 1210 print"   ($ff + $01 = $0100)
  60. 1220 [153][163]9);"clc";[166]9);"loescht das c-flag"
  61. 1230 [153][163]21);"(kommt spaeter!)"
  62. 1240 [153][163]9);"lda # $ff   laed $ff in den ac"
  63. 1250 [153][163]9);"adc # $01   addiert $01 dazu"
  64. 1260 [153]"das ergebnis (= $00) steht  im ac,  das"
  65. 1270 [153]"c-flag ist gesetzt."
  66. 1280 i[178]6:[141]5000:[139]fl[167]1000
  67. 1400 [153]"loadtototo":[153]"sbcwait subtract memory from ac with carry"
  68. 1410 [153]"    tab( tab(";[163]33);"tab("
  69. 1420 [153]"subtrahiert  das adressierte  byte  und"
  70. 1430 [153]"das invertierte carry-flag vom ac.  der"
  71. 1440 [153]"programmierer muss  vor der ersten sub-"
  72. 1450 [153]"traktion das carry-flag  setzen,  damit"
  73. 1455 [153]"das ergebnis nicht   um eins   zu klein"
  74. 1460 [153]"wird.  weil das invertierte c-flag sub-":[153][163]16);u$;"val"
  75. 1470 [153]"trahiert wird, ist das gerade umgekehrt"
  76. 1480 [153]"wie bei der addition mit adc."
  77. 1510 i[178]7:[141]5000:[139]fl[167]1200
  78. 1600 [153]"loadfindet bei der subtraktion  ein  ueber-"
  79. 1610 [153]"lauf statt (d.h.die differenz ist klei-"
  80. 1615 [153]"ner als null),so wird das c-flagcloserueck-"
  81. 1620 [153]"gesetzt,andernfalls gesetzt. also genau"
  82. 1622 [153]"umgekehrt wie bei adc."
  83. 1630 [153]"bei adc und sbc traegt das c-flag einen"
  84. 1640 [153]"eventuell entstehenden uebertrag. damit"
  85. 1650 [153]"ist es moeglich,  zahlen,  die mehr als"
  86. 1655 [153]"nur ein byte umfassen, einfach zu bear-"
  87. 1660 [153]"beiten. hierzu zwei beispiele:"
  88. 1710 i[178]8:[141]5000:[139]fl[167]1400
  89. 1800 [153]"loadbeispiel (zuerst addition) :":[153]u$;u$;u$
  90. 1815 [153]"in den speichern $01, $02  und $11, $12"
  91. 1820 [153]"stehen zwei zweistellige hex-zahlen.sie"
  92. 1830 [153]"sollen addiert  und nach  $21, $22, $23"
  93. 1840 [153]"gespeichert werden. das niederwertigere"
  94. 1850 [153]"byte steht jeweils  im ersten speicher."
  95. 1855 [153]"bei der loesung  wenden wir den automa-"
  96. 1860 [153]"tischen ueberlauf an:"
  97. 1910 i[178]9:[141]5000:[139]fl[167]1600
  98. 2000 [153]"loadclc         ruecksetzen des c-flags"
  99. 2005 [153]"lda $01     laed erste zahl,l in ac"
  100. 2010 [153]"adc $11     + zweite zahl,l"
  101. 2015 [153]"sta $21     summe,l nach $21"
  102. 2020 [153]"lda $02     laed erste zahl,h in ac"
  103. 2030 [153]"adc $12     + zweite zahl,h + uebertrag"
  104. 2040 [153]"sta $22     summe,h1 nach $22"
  105. 2050 [153]"lda # $00   laed $00 in ac"
  106. 2055 [153]"adc # $00   + $00 + uebertrag"
  107. 2060 [153]"sta $23     summe,h2 nach $23"
  108. 2110 i[178]10:[141]5000:[139]fl[167]1800
  109. 2200 [153]"loadbei der ersten addition ist  das c-flag"
  110. 2210 [153]"rueckgesetzt.  addiert werden also  nur"
  111. 2220 [153]"die inhalte  der speicher  $01 und $11."
  112. 2230 [153]"eine eventueller ueberlauf steht  im c-"
  113. 2240 [153]"flag. vor der zweiten addition wird das"
  114. 2250 [153]"c-flag nicht rueckgesetzt.bei der zwei-"
  115. 2260 [153]"ten  addition wird  der uebertrag  also"
  116. 2270 [153]"mit dazu addiert.    ebenso im  dritten"
  117. 2280 [153]"additionsschritt: es werden  die zahlen"
  118. 2290 [153]"$00, $00 und das c-flag addiert.das er-"
  119. 2300 [153]"gebnis ist identisch mit dem uebertrag."
  120. 2310 i[178]11:[141]5000:[139]fl[167]2000
  121. 2400 [153]"loadbeispiel (jetzt subtraktion) :":[153]u$;u$;u$
  122. 2410 [153]"sec         setzen des c-flags"
  123. 2420 [153]"lda $01     laed erste zahl,l in ac"
  124. 2430 [153]"sbc $11     - zweite zahl,l"
  125. 2440 [153]"sta $21     differenz,l nach $21"
  126. 2450 [153]"lda $02     laed erste zahl,h in  ac"
  127. 2460 [153]"sbc $12     - zweite zahl,h - uebertrag"
  128. 2470 [153]"sta $22     differenz,h1 nach $22"
  129. 2480 [153]"lda # $00   laed $00 in ac"
  130. 2490 [153]"sbc # $00   - uebertrag"
  131. 2500 [153]"sta $23     differenz,h2 nach $23"
  132. 2510 i[178]12:[141]5000:[139]fl[167]2200
  133. 2600 [153]"loadbei dieser subtraktion  steht  im spei-"
  134. 2620 [153]"cher $23 nur dann null,  wenn die erste"
  135. 2630 [153]"zahl groesser als die zweite war.   an-"
  136. 2640 [153]"dernfalls  fuehrtclose die subtraktion  zum"
  137. 2650 [153]"speicherinhalt $ff.ueberlegen sie sich,"
  138. 2660 [153]"warum!"
  139. 2670 [153]"die beiden befehle  adc und  sbc beein-"
  140. 2680 [153]"flussen die flags n,z,c,v.  auf die be-"
  141. 2690 [153]"deutung des v-flags wollen wir  im rah-"
  142. 2700 [153]"men dieses lehrgangs nicht eingehen."
  143. 2710 i[178]13:[141]5000:[139]fl[167]2400
  144. 2800 [153]"loadaufgaben :":[153]u$
  145. 2810 [153]"1. schreiben sie ein maschinenprogramm,"
  146. 2820 [153]"das zum inhalt des speichers  $8000 die"
  147. 2830 [153]"zahl $80 hinzuaddiert. ein hierbei ent-"
  148. 2840 [153]"stehender uebertrag ist ohne bedeutung."
  149. 2850 [153]"2. dasselbe mit subtraktion!"
  150. 2860 [153]"falls sie die loesung nicht finden: die"
  151. 2870 [153]"beiden programme stehen ab den speicher"
  152. 2880 [153]"stellen 830 und 840.sie koennen sie mit"
  153. 2890 [153]"sys 830 bzw. sys 840 aufrufen."
  154. 2910 [153]"  - seite 14 -  <+> ontotototocmdcmdcmdcmdendewait  <-> von vorne";
  155. 3060 [141]5020:[145]fl[137]0:[153]"load":[128]:[138]
  156. 5000 [143] umblaettern
  157. 5010 [153]"  - seite";i;"-  <+> weiter  <-> zurueck";
  158. 5020 [129]i[178]0[164]11:[161]x$:[130]
  159. 5030 [161]x$:[139]x$[178]""[167]5030
  160. 5040 [139]x$[178]"+"[167]fl[178]0:[142]
  161. 5050 [139]x$[178]"-"[167]fl[178]1:[142]
  162. 5060 [137]5030
  163. 65401 [246]ea[255]
  164.